15.2 なぜ並行処理が必要なのか?
並行処理とは何なのか?
並行性はアプリケーションの実装に関するものではなく、プログラムやアルゴリズム、問題が持つ性質 (Kindle の位置No.10069-10070)
並列処理は「並行性を持つ問題に対するアプローチの1つ」
並列処理以外のアプローチもある
Leslie Lamport (1976) による定義
「もし2つのイベントがどちらも他方に影響を与えない場合、それらは並行である」(Japanese Edition) (Kindle の位置No.10072-10073)
イベントをプログラムやアルゴリズム、問題に置き換え、完全もしくは部分的に順序に依存しないコンポーネント(ユニット)に分割できる場合、それは並行であると言えます。(Kindle の位置No.10074-10075)
互いに独立して処理されてもよい
バラバラに処理できる
処理の順序は最終結果に影響しない
「同時に(*concurrent)または並列で(*paralell)処理できることを意味」する (※英語は引用者が追加)
なぜ並行処理が必要なのか?
「一度に1つのことを段階的に実行する同期的なアルゴリズム」(Kindle の位置No.10084-10085)
同期的な方法が適さない(2例)
1. 問題の規模が大きい
ジョブの処理時間が1つの計算ユニット(マシン・CPUコア)のパフォーマンスで制限される
許容可能な時間内に処理したい
利用可能なリソースの中で並列に分散して実行
👉並列処理が必要。マルチスレッド・マルチプロセス
並列処理には並列できるだけの複数のリソースが必要ということでもある
雑にまとめると、1CPUだと処理時間が長くなってしまうような場合
2. 「複数のユーザーやソフトウェアエージェントの要求を同時に満たす必要がある」(Kindle の位置No.10085-10086)
前の処理を終了するまで、新しい入力を受け取って処理ができない状況
以前の入力が完了していなくても、新しい入力を受け入れたい(応答性を維持したい)
必ずしも並列に処理する必要はない
多数のクライアントを個別に処理、かつ別の処理の完了を待つ必要がない
イベントループ
上記2つは同時に起こり得る
1つの処理ユニットで入力を処理できない状況でも、応答性の維持が必要 (Kindle の位置No.10099-10100)
Webサーバ開発では、非同期イベントループやマルチスレッド・マルチプロセス併用よくある